/*
* 89. 格雷编码
* 格雷编码是一个二进制数字系统，在该系统中，两个连续的数值仅有一个位数的差异。
* 给定一个代表编码总位数的非负整数 n，打印其格雷编码序列。即使有多个不同答案，你也只需要返回其中一种。
* 格雷编码序列必须以 0 开头
* */

export const grayCode = (n) => {
	return make(n).map((item) => {
		return parseInt(item, 2)
	})
}

let make = (n) => {
	if (n === 1) {
		return ['0', '1']
	} else {
		let prev = make(n - 1)
		const arr = [...prev]
		let reverseArr = arr.reverse()

		const arr1 = prev.map((item) => {
			return `0${item}`
		})

		const arr2 = reverseArr.map((item) => {
			return `1${item}`
		})

		return arr1.concat(arr2)
	}
}
